java找出哪个包调用服务
在equinox OSGi中,我使用的是来自几个不同捆绑包的服务(DS),我想知道每次谁在使用它
服务写入数据库,我想知道哪个包写入什么
BuildinLogService必须能够做到这一点,因为它知道每个日志行是谁写的,但我不知道如何写的
最简单的解决方案是将每个方法中的包的名称放入服务中,但我希望有一个更优雅的解决方案
你可以在下面搜索框中键入要查询的问题!
在equinox OSGi中,我使用的是来自几个不同捆绑包的服务(DS),我想知道每次谁在使用它
服务写入数据库,我想知道哪个包写入什么
BuildinLogService必须能够做到这一点,因为它知道每个日志行是谁写的,但我不知道如何写的
最简单的解决方案是将每个方法中的包的名称放入服务中,但我希望有一个更优雅的解决方案
# 1 楼答案
将捆绑包名称或Bundle对象添加到从服务客户端传递给服务的对象。通过这样做,您可以找到每个服务调用的客户机
你提到了后勤服务。它使用LogEntry class将带有日志消息的Bundle对象传递给服务
# 2 楼答案
这正是
ServiceFactory
的用途,请参见OSGi核心R6规范第5.9节。“服务工厂”在澄清问题后更新如下,以指定DS用途
这可以通过在
@Component
注释上使用scope=ServiceScope.BUNDLE
来实现。然后,您可以通过允许将ComponentContext
注入激活方法并调用getUsingBundle()
来访问调用包。例如:在底层,这是通过将服务注册为
ServiceFactory
的实例而不是普通的服务对象来实现的。当OSGi代表使用者获得服务时,它调用getService
方法,该方法将使用者绑定对象传递给服务的提供者。这对消费者来说是完全透明的,也就是说,他们根本不需要更改代码